import jwt


#jwt工具
#用户登录后，需要把登录用户的id和用户名保存到jwt中，返回给前端保存，后续前端的请求中，
# 需要携带jwt，后端通过解析jwt来获取用户信息，从而实现用户认证和授权。
#



# 密钥，用于签发和解析JWT
SECRET_KEY = 'fat'

def generate_jwt_token(payload):
    """
    生成JWT令牌
    :param payload: JWT令牌的载荷，一个字典
    :return: JWT令牌
    """
    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
    return token


def verify_jwt_token(token):
    """
    验证JWT令牌
    :param token: 要验证的JWT令牌
    :return: 如果验证成功，返回JWT令牌的载荷；否则返回None
    """
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
        print(f"令牌校验：{payload}")
        return payload
    except jwt.ExpiredSignatureError:
        # 如果令牌已过期
        return None
    except jwt.InvalidTokenError:
        # 如果令牌无效
        return None


def test_jwt_util():
    # 生成一个示例的用户载荷
    user_payload = {'username': 'example_user', 'user_id': 123}

    # 生成JWT令牌
    token = generate_jwt_token(user_payload)
    print("生成的 JWT 令牌:", token)

    # 验证JWT令牌
    decoded_payload = verify_jwt_token(token)
    print("从 JWT 令牌解码的有效负载：", decoded_payload)

    # 测试令牌过期
    expired_token = jwt.encode({'exp': 0}, SECRET_KEY, algorithm='HS256')
    print("过期的令牌：", expired_token)
    expired_payload = verify_jwt_token(expired_token)
    print("从过期令牌解码的有效负载：", expired_payload)

    # 测试无效令牌
    invalid_token = "令牌无效"
    invalid_payload = verify_jwt_token(invalid_token)
    print("从无效令牌解码的有效负载：", invalid_payload)


# 运行测试方法
if __name__ == "__main__":
    test_jwt_util()
